import request from '@/utils/request';
import { type Category, type CategoryRequest, type PageQuery, type PageResult } from '../../types/app';

/**
 * 分页查询分类列表
 * @param params 查询参数
 * @returns 分页结果
 */
export function getCategoryPage(params: PageQuery) {
  return request<PageResult<Category>>({
    url: '/api/categories',
    method: 'get',
    params
  });
}

/**
 * 获取所有分类
 * @returns 分类列表
 */
export function getAllCategories() {
  return request<Category[]>({
    url: '/api/categories/all',
    method: 'get'
  });
}

/**
 * 获取分类详情
 * @param id 分类ID
 * @returns 分类详情
 */
export function getCategoryDetail(id: number) {
  return request<Category>({
    url: `/api/categories/${id}`,
    method: 'get'
  });
}

/**
 * 创建分类
 * @param data 分类数据
 * @param icon 分类图标
 * @returns 分类ID
 */
export function createCategory(data: CategoryRequest, icon?: File) {
  const formData = new FormData();
  formData.append('name', data.name);

  if (data.sortOrder !== undefined) {
    formData.append('sortOrder', data.sortOrder.toString());
  }

  if (icon) {
    formData.append('icon', icon);
  }

  return request<number>({
    url: '/api/categories',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

/**
 * 更新分类
 * @param data 分类数据
 * @param icon 分类图标
 * @returns 是否成功
 */
export function updateCategory(data: CategoryRequest, icon?: File) {
  const formData = new FormData();
  formData.append('id', data.id!.toString());
  formData.append('name', data.name);

  if (data.sortOrder !== undefined) {
    formData.append('sortOrder', data.sortOrder.toString());
  }

  if (icon) {
    formData.append('icon', icon);
  }

  return request<boolean>({
    url: '/api/categories',
    method: 'put',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

/**
 * 删除分类
 * @param id 分类ID
 * @returns 是否成功
 */
export function deleteCategory(id: number) {
  return request<boolean>({
    url: `/api/categories/${id}`,
    method: 'delete'
  });
}
